home *** CD-ROM | disk | FTP | other *** search
- /******************** ***********************/
- //
- // Player PRO 4.5x -- MAD Class for BeOS -
- //
- // Library Version 4.5
- //
- // To use with MAD Library for BeOS: CodeWarrior
- //
- // Antoine ROSSET
- // 16 Tranchees
- // 1206 GENEVA
- // SWITZERLAND
- //
- // Thank you for your interest in PlayerPRO !
- //
- // FAX: (+41 22) 346 11 97
- // PHONE: (+41 79) 203 74 62
- // Internet: rosset@dial.eunet.ch
- //
- /******************** ***********************/
-
- #include "RDriver.h"
- #include "DriverClass.h"
-
- static MADDriverRec *MADDriver;
-
- MADDriverClass::MADDriverClass( MADDriverSettings *init)
- {
- if( MADInitLibrary( "Plugs", init->sysMemory) != noErr) debugger("Small Problem I...");
- MADDriver = MADGetMADDriverPtr();
-
- if( MADCreateDriver( init) != noErr) debugger("Small Problem II...");
-
- /////////////
-
- mPlayer = new BAudioSubscriber("TrackerPlayer");
- if (mPlayer)
- {
- long error, chan;
-
- error = mPlayer->Subscribe(B_DAC_STREAM,B_INVISIBLE_SUBSCRIBER_ID,TRUE);
-
- if( init->outPutMode == MonoOutPut) chan = 1;
- else chan = 2;
-
- error = mPlayer->SetDACSampleInfo( init->outPutBits/8, chan, B_BIG_ENDIAN, B_LINEAR_SAMPLES);
- error = mPlayer->SetSamplingRate( init->outPutRate>>16L );
-
- /* long bufSize, bufCount, subCount;
- bool isRunning;
- subscriber_id clique;
-
- error = mPlayer->GetStreamParameters(&bufSize, &bufCount, &isRunning, &subCount, &clique);
- */
- error = mPlayer->EnterStream(NULL, FALSE, NULL,trackerStreamPlay, NULL, TRUE);
- }
- }
-
- MADDriverClass::~MADDriverClass()
- {
- delete mPlayer;
-
- MADDisposeDriver();
- MADDisposeLibrary();
- }
-
- extern "C" {
- Boolean DirectSave( Ptr myPtr, MADDriverSettings *driverType, MADDriverRec *intDriver);
- }
-
- bool MADDriverClass::trackerStreamPlay(void *user, char *buffer, long count)
- {
- if( count != 4096) debugger("count error");
-
- DirectSave( (Ptr) buffer, &MADDriver->DriverSettings, MADDriver);
-
- if( MADDriver->DriverSettings.outPutBits == 8)
- {
- for( long i = 0; i < count; i++) buffer[i] -= 0x80;
- }
-
- return true;
- }
-
- void MADDriverClass::LoadMusic( BFile & file)
- {
- file.Open(O_RDWR);
-
- long len = file.Seek(0, 2);
- char * ptr = new char[len];
- file.Seek(0, 0);
- file.Read(ptr, len);
-
- ///////////
-
- if( MADLoadMusicPtr( (Ptr) ptr)) debugger( "error LoadPtr");
-
- if( MADStartDriver()) debugger( "error MADPlay"); // Turn interrupt driver function ON
- MADPlayMusic(); // Read the current partition in memory
-
- //////////
-
- file.Close();
-
- delete[] ptr;
- }